/**
 * Created by XQ on 2015/7/19.
 */
(function QFooter(window) {

    //保存window的属性，新建QFooter对象
    var
        QFooter = {},

    // 存放所有通过控件初始化过的对象，使用局部变量来控制，拒绝外部对此变量的操作
        List = [];

    window.QFooter = QFooter;		//在window上的引用

    /**
     * 工具对象
     */
    QFooter.Util = {};

    QFooter.option = {
        "class" : "pagination"
    }

    function foot(DOM, fn, option) {

        var $DOM = DOM || $("<div/>"),
            option = $.extend(true, {}, QFooter.option),// 深层复制配置
            pageNum = 0,	//当前页数，不能删除变量
            pageSize = 0,   //默认每页显示数目
            total = 0,
            page_Skip_Fn = fn || function (_pageNum) {	//默认跳转方法
                pageNum = _pageNum;
            };

        this.getDOM = function () {
            return $DOM;
        }

        this.getOption = function () {
            return option;
        }

        /*获取每页数据数量 */
        this.getPageSize = function () {
            return pageSize;
        }

        /* 获取当前页码 */
        this.getPageNum = function () {
            return pageNum;
        }

        /*获取数据总数 */
        this.getTotal = function () {
            return total;
        }

        /*获取页数*/
        this.getCount = function () {
            return count;
        }

        /*刷新内容 */
        this.refresh = function (pnum, psize, ptotal) {

            $DOM.empty();
            pageNum = parseInt(pnum) || 0;
            pageSize = parseInt(psize) || 0;
            total = parseInt(ptotal) || 0;

            var count = pageSize == 0 ? 0 : Math.ceil(total / pageSize);

            //添加跳转到最前页的按钮
            if (pageNum <= 0) {
                $("<span>").addClass("firstPage").html("&nbsp;").appendTo($DOM);
            } else {
                var $a = $("<a>").addClass("firstPage").html("&nbsp;").attr("href", "javascript:;");
                $a.bind("click", {page: this, pageNum: 0}, function (event) {
                    page_Skip_Fn(event.data.pageNum);
                });
                $a.appendTo($DOM);
            }

            //添加前一页按钮
            if (pageNum <= 0) {
                $("<span>").addClass("previousPage").html("&nbsp;").appendTo($DOM);
            } else {
                var $a = $("<a>").addClass("previousPage").html("&nbsp;").attr("href", "javascript:;");
                $a.bind("click", {page: this, pageNum: pageNum - 1}, function (event) {
                    page_Skip_Fn(event.data.pageNum);
                });
                $a.appendTo($DOM);
            }

            if (pageNum > 2) {
                $("<span>").addClass("pageBreak").html("...").appendTo($DOM);
            }

            for (var i = pageNum - 2; i <= pageNum + 2; i += 1) {

                if (i < 0 || i >= count) continue;

                if (i != pageNum) {
                    var $a = $("<a>").html(i+1).attr("href", "javascript:;");
                    $a.bind("click", {page: this, pageNum: i}, function (event) {
                        page_Skip_Fn(event.data.pageNum);
                    });
                    $a.appendTo($DOM);
                } else {
                    $("<span>").addClass("currentPage").html(i+1).appendTo($DOM);
                }
            }

            if (pageNum + 3 < count) {
                $("<span>").addClass("pageBreak").html("...").appendTo($DOM);
            }

            //添加下一页按钮
            if (pageNum + 1 < count) {

                var $a = $("<a>").addClass("nextPage").html("&nbsp;").attr("href", "javascript:;");
                $a.bind("click", {page: this, pageNum: pageNum + 1}, function (event) {
                    page_Skip_Fn(event.data.pageNum);
                });
                $a.appendTo($DOM);
            } else {
                $("<span>").addClass("nextPage").html("&nbsp;").appendTo($DOM);
            }

            //添加最后一页按钮
            if (pageNum + 1 < count) {

                var $a = $("<a>").addClass("lastPage").html("&nbsp;").attr("href", "javascript:;");
                $a.bind("click", {page: this, pageNum: count - 1}, function (event) {
                    page_Skip_Fn(event.data.pageNum);
                });
                $a.appendTo($DOM);
            } else {
                $("<span>").addClass("lastPage").html("&nbsp;").appendTo($DOM);
            }

            //添加跳转
            var $span = $("<span>").addClass("pageSkip");
            $span.append("共" + count + "页&nbsp;到");
            var $input = $("<input QID='pageNum' maxlength='9' onpaste='return false;' type='text'/>");
            $input.val(pageNum + 1);
            $span.append($input);
            var $btn = $("<button>").html("&nbsp;");
            $btn.bind("click", {page: this, count: count}, function (event) {
                var pageNum = $input.val() > event.data.count ? event.data.count : $input.val();
                pageNum = pageNum > 0 ? pageNum : 1;
                page_Skip_Fn(pageNum - 1);
            });
            $span.append($btn);
            $DOM.append($span);
        }

        this.onPageSkip = function (_fn, _exec) {

            var caller = this;
            //默认执行以下内容
            if (_exec != undefined && !_exec) {

                page_Skip_Fn = _fn;

            } else {

                page_Skip_Fn = function (pageNum) {
                    default_Page_Skip_Fn.apply(caller, arguments);
                    _fn.apply(caller, arguments);
                };
            }
        }

        this.pageSkip = function (_pageNum) {
            page_Skip_Fn(_pageNum);
        }

        this.clear = function () {
            $DOM.empty();
        }

        $DOM.addClass(option["class"]);				//设置行属性
    }

    /**
     * 初始化
     */
    QFooter.init = function(pk, fn, option){

        var footer = new foot($(pk), fn, option);
        List[pk] = List.length;				        //索引，其实没必要，直接用对象的map性质存储也是可以的，这里为了让代码更好理解
        List.push(footer);							//保存创建的对象
        return footer;								//初始化完成，返回对象
    }

    /**
     * 获取QTable对象，若对象不存在，将DOM对象转化成QTable对象
     */
    QFooter.get = function(pk){
        return List[List[pk]];
    }
})(window);